﻿#define _CRT_SECURE_NO_WARNINGS

////C语言版
//#include<stdio.h>
//int main()
//{
//	printf("hello world\n");
//	return 0;
//}


////C++版
//#include<iostream>
//using namespace std;
//int main()
//{
//	cout << "hello world\n" << endl;
//	return 0;
//}

//命名冲突
//#include <stdio.h>
////#include <stdlib.h>
//int rand = 10;
//int main()
//{
//	// 编译报错：error C2365: “rand”: 重定义；以前的定义是“函数”
//	printf("%d\n", rand);
//	return 0;
//}


//namesapce的定义和使用
//#include<stdio.h>
//#include<stdlib.h>
//namespace xiaodu
//{
//	//定义变量
//	int rand = 10;
//
//	//定义函数
//	int Mul(int a, int b)
//	{
//		return a * b;
//	}
//
//	//定义类型
//	struct Node
//	{
//		int data;
//		struct Node* next;
//	};//结构体后面有分号
//}//这里没有分号
//
//int main()
//{
//	//这里访问全局的rand也就是一个函数，应该打印出来一个地址
//	//printf("%d\n", rand);
//	printf("%p\n", rand);
//	return 0;
//}


//
//#include<stdio.h>
//#include<stdlib.h>
//namespace xiaodu
//{
//	//定义变量
//	int rand = 10;
//
//	//定义函数
//	int Mul(int a, int b)
//	{
//		return a * b;
//	}
//
//	//定义类型
//	struct Node
//	{
//		int data;
//		struct Node* next;
//	};//结构体后面有分号
//}//这里没有分号
//
//int main()
//{
//	//这里访问全局的rand也就是一个函数，应该打印出来一个地址
//	printf("%p\n", rand);
//	//访问域里面的rand
//	printf("xiaodu::rand = %d\n", xiaodu::rand);
//	//访问域里面的Mul函数
//	printf("xiaodu::Mul(2,4) = %d\n", xiaodu::Mul(2, 4));
//	return 0;
//}
//
////
//#include<stdio.h>
//#include<stdlib.h>
//
//namespace B
//{
//	//namespace可以嵌套定义
//	namespace data
//	{
//		int rand = 10;
//
//		int Mul(int a, int b)
//		{
//			return a * b;
//		}
//	}
//	//不同的域可以定义同名变量
//	namespace st
//	{
//		int rand = 1;
//
//		struct Node
//		{
//			int data;
//			struct Node* next;
//		};
//	}
//}//这里没有分号
//
//int main()
//{
//	printf("%p\n", rand);//打印地址，全局域的函数rand
//	printf("B :: data :: rand = %d\n", B::data::rand);
//	printf("B :: st :: rand = %d\n", B::st::rand);
//	return 0;
//}


//
//#include"Stack.h"
//// 全局定义了⼀份单独的Stack
//typedef struct Stack
//{
//	int a[10];
//	int top;
//}ST;
//void STInit(ST* ps) {}
//void STPush(ST* ps, int x) {}
//int main()
//{
//	// 调用全局的
//	ST st1;
//	STInit(&st1);
//	STPush(&st1, 1);
//	STPush(&st1, 2);
//	printf("sizeof(st1) = %d\n", sizeof(st1));
//	// 调用命名空间域的
//	MyStack::Stack st2;
//	printf("sizeof(st2) = %d\n", sizeof(st2));
//	MyStack::StackInit(&st2);
//	MyStack::StackPush(&st2, 3);
//	MyStack::StackPush(&st2, 4);
//	return 0;
//}


//
//#include<stdio.h>
//namespace xiaodu
//{
//	int a = 10;
//	int b = 100;
//}
//int main()
//{
//	// 编译报错：error C2065: “a”: 未声明的标识符
//	printf("%d\n", a);
//	return 0;
//}


//
//#include<stdio.h>
//namespace xiaodu
//{
//	int a = 10;
//	int b = 100;
//}
//int main()
//{
//	printf("xiaodu::a = %d\n", xiaodu::a);
//	printf("xiaodu::b = %d\n", xiaodu::b);
//	return 0;
//}


//
//#include"Stack.h"
////使用using展开命名空间中全部成员
//using namespace MyStack;
//int main()
//{
//	Stack st;
//	StackInit(&st);
//	StackPush(&st, 1);
//	StackPush(&st, 2);
//	StackPush(&st, 3);
//	StackPush(&st, 4);
//	StackPush(&st, 5);
//	StackPush(&st, 6);
//	StackPush(&st, 7);
//	printf("StackTop = %d\n", StackTop(&st));
//	StackDestory(&st);
//	return 0;
//}



//
//#include"Stack.h"
////使用using展开部分命名空间中成员
////展开StackPush
////这里不需要关键字namespace（展开部分命名空间中成员）
//using MyStack::StackPush;
//int main()
//{
//	MyStack::Stack st;
//	MyStack::StackInit(&st);
//	//StackPush经常使用
//	StackPush(&st, 1);
//	StackPush(&st, 2);
//	StackPush(&st, 3);
//	StackPush(&st, 4);
//	StackPush(&st, 5);
//	StackPush(&st, 6);
//	StackPush(&st, 7);
//	printf("StackTop = %d\n", MyStack::StackTop(&st));
//	MyStack::StackDestory(&st);
//	return 0;
//}


//标准的输入、输出流库
#include<iostream>
//不包含<stdio.h>，因为vs系列编译器<iostream>间接包含它

//C++标准库都放在⼀个叫std(standard)的命名空间中
//使用using进行展开
using namespace std;

int main()
{
	
	int a = 0;
	double b = 0;
	//C++的输入输出可以自动识别变量类型
	//同时可以连续输入输出
	//cout ——输出， cin——输入
	cout << "enter a、b:";
	cin >> a >> b;
	//std::endl 是一个函数，流插入输出时，相当于插入⼀个换行字符加刷新缓冲区
	cout << "a = " << a << '\n' << "b = " << b << endl;
	return 0;
}